package com.szwistar.common.hxdir;

/**
 * 空调状态指令
 */
public class ArcState {
    public static final byte POWER_ON = 1;      // 开机
    public static final byte POWER_OFF = 0;     // 关机

    public static final byte MODE_AUTO = 1;     // 自动（默认）
    public static final byte MODE_COOL = 2;     // 制冷
    public static final byte MODE_DRY = 3;      // 抽湿
    public static final byte MODE_FAN = 4;      // 送风
    public static final byte MODE_HEAT = 5;     // 制热

    public static final byte DIR_UP = 1;        // 手动风向：向上
    public static final byte DIR_KEEP = 2;      // 手动风向：保持（默认）
    public static final byte DIR_DOWN = 3;      // 手动风向：向下

    public static final byte SWEEP_OFF = 0;     // 自动扫风关
    public static final byte SWEEP_ON = 1;      // 自动扫风开（默认）

    public static final byte SPEED_AUTO = 1;    // 风力自动（默认）
    public static final byte SPEED_LOW = 2;     // 低
    public static final byte SPEED_MIDDLE = 3;  // 中
    public static final byte SPEED_HIGH = 4;    // 高

    // 常用指令
    public static final ArcState AUTO = new ArcState(POWER_ON, 25);
    public static final ArcState OFF = new ArcState(POWER_OFF, 25);

	byte power;         // 开关数据：开机时：0x01,关机时：0x00
	byte mode;          // 模式对应数据和显示：自动（默认）：0x01,制冷：0X02,抽湿：0X03,送风：0x04;制热：0x05
	byte windDir;       // DIR_UP/KEEP/DOWN 手动风向：向下：03,中：02,向上：01,默认02
	byte autoWindDir;   // SWEEP_ON/OFF 扫风：01,打开,00关,默认开:01
	byte windRate;      // 风量数据：自动：01,低：02,中：03,高：04
	byte temperature;

	public byte getPower() { return power; }
	public void setPower(byte power) { this.power = power; }

	public byte getMode() { return mode; }
	public void setMode(byte mode) { this.mode = mode; }

	public byte getWindDir() { return windDir; }
	public void setWindDir(byte windDir) { this.windDir = windDir; }
	public void setSweep1() { windDir = (byte) ((windDir+1)%4); }

	public byte getAutoWindDir() { return autoWindDir; }
	public void setAutoWindDir(byte autoWindDir) { this.autoWindDir = autoWindDir; }
	public void setSweep2() { autoWindDir = (byte) ((autoWindDir+1)%2); }

	public byte getWindRate() { return windRate; }
	public void setWindRate(byte windRate) { this.windRate = windRate; }

	public byte getTemperature() { return temperature; }
	public void setTemperature(byte temperature) {
		// 自动设置电源打开，
		this.setPower(POWER_ON);
		// (因为自动模式下无法正确设置温度)如果温度低于28度，设置为制冷模式，否则设置为制热模式
		this.setMode((temperature < 28) ? MODE_COOL : MODE_HEAT);
		// 设置温度
		this.temperature = temperature;
	}

	@Override
	public String toString() {
		return String.format("ArcState(power:%s,temperature:%d,mode:%d,windDir:%d,autoWindDir:%d,windRate:%d)",
				(power==1)?"ON":"OFF", temperature, mode, windDir, autoWindDir, windRate );
	}

	public ArcState() {
		// 设置默认参数
		power = POWER_ON;
	    mode = MODE_AUTO;
        windDir = DIR_KEEP;
        autoWindDir = SWEEP_ON;
        windRate = SPEED_AUTO;
        temperature = 25;
	}

    public ArcState(byte power, int temperature) {
        this();
        this.power = power;
        this.temperature = (byte)temperature;
    }

    public ArcState(byte power, byte mode, byte dir, byte sweep, byte speed, byte temperature) {
        this.power = power;
        this.mode = mode;
        this.windDir = dir;
        this.autoWindDir = sweep;
        this.windRate = speed;
        this.temperature = temperature;
    }
}
